<?php
/* 
 * ********* CVS HEADER ********* 
 * 
 * $RCSfile: indexation.php,v $ 
 * $Date: 2005/08/31 10:13:46 $ 
 * $Revision: 1.2 $ 
 * 
 * ********* CVS HEADER ********* 
 */
/**
 * Cette classe permet d'indexer des documents dans la base de donnees.
 * On indexe une Url...
 *
 * L'utilisation classique est:
 * $m = new MoteurIndexation("?op=html&code=index");
 * $m->setType($monTypeID);
 * $m->setHTMLID($monHTMLID);
 * $m->setTitre($monTitre);
 * $m->setDescription($maDescription);
 * $m->setInit();
 * $m->indexer($mon_resumer);
 * $m->indexer($mon_texte);
 * $m->indexer($mon_entete);
 *
 * Pour le deplacement d'un document
 * $m = new MoteurIndexation($old_url);
 * $m->deplacerURL($new_url);
 *
 * Pour changer l'URL de reference (celle utilisee pour creer le Moteur d'Indexation
 * $m->initialiserURL($new_url,"mon titre","ma description");
 *
 * Pour supprimer une URL du moteur
 * $m = new MoteurIndexation($url);
 * $m->supprimer();
 * 
 */
//require_once(get_path_module("recherche.fonctions"));

class MoteurIndexation {
	var $my_url = '';
	var $my_url_id = 0;
	var $my_title = '';
	var $my_description = '';
	var $my_texte = '';
	var $my_type = 0;
	var $my_html_id = 0;
		
	var $_init = 0;
	/**
	 * Constructeur, en parametre l'url a indexer
	 */
	function MoteurIndexation($url){
		$this->my_url = $url;
		$this->_setUrlID();
	}
	
	/**
	 * Permet d'indexer du texte lie a l'url
	 */
	function indexer($texte){
		/**
		// 0) on supprime les balises
		$texte = strip_tags($texte);
		// 0.0) on met tout en minuscule
		$texte = strtolower($texte);
		// 0.1) on remplace les accents
		$texte = SuppAccents($texte);
		// 0.2) on supprime les caracteres speciaux
		$texte = SuppNonAZ($texte);
		// 0.3) on remplace les retours a la ligne par des espaces
		$texte = SuppLigne($texte);
		// 1) on chunk le texte en mot
		$texte = trim($texte);
		$mots = explode(" ",$texte);
		// 2) on met tout au singulier
		for($i=0;$i<count($mots);$i++){
			$mots[$i] = Singulier($mots[$i]);
		}
		// 3) on enleve les mots vides
		
		// 4) on recupere les mots dans la base de donnees et on les ajoute
		if($this->_init==0){
			$query = "SELECT mot,nb FROM rportal_moteur_match WHERE id_url='".$this->my_url_id."'";
			$result=rportalrequete($query) or rportalerreur($query,"?op=");
			while($words = rportalligne($result)){
				for($i=0;$i<$words['nb'];$i++){
					array_push($mots,$words['mot']);
				}
			}
		}
		$this->_init=0;
		$query = "DELETE FROM rportal_moteur_match WHERE id_url='".$this->my_url_id."'";
		@rportalrequete($query) or rportalerreur($query,"?op=");	
		// 5) on ordonne par ordre croissant
		sort($mots);
		
		$j=0;
		$mot="";
		$c=1;
		$mots_unique = array();
		$mots_compteur = array();
		for($i=0;$i<count($mots);$i++){
			if($mot==""){
				$mot = $mots[$i];
				$c=1;
			}else if($mot!=$mots[$i]){
			$mots_unique[$j]=$mot;
			$mots_compteur[$j]=$c;
			$j++;
			$mot = $mots[$i];
			$c=1;
			}else{
				$c++;	
			}	
		}
		
		// 6) on construit la super requete SQL
		$tag = 0;
		$_q="";
		for($i=0;$i<count($mots_unique);$i++){
			$q = "('".$this->my_url_id."','".$mots_unique[$i]."','".$mots_compteur[$i]."')";
			if($tag!=0){
				$_q.=",".$q;
			}else{
				$_q = $q;
				$tag=1;	
			}
		}
		// 7) on execute la requete
		if($_q!=""){
			$query = "INSERT INTO rportal_moteur_match (id_url,mot,nb) VALUES ".$_q;
			@rportalrequete($query) or rportalerreur($query,"?op=");	
		}
		
		*/
		if($this->_init==0){
			$this->my_texte .= " ".$texte;
		}else{
			$this->my_texte = $texte;
			$this->_init = 0;
		}
		$query="UPDATE rportal_moteur_url SET texte='".$this->my_texte."' WHERE id='".$this->my_url_id."'";
		@rportalrequete($query) or rportalerreur($query,"?op=");
	}
	
	/**
	 * Permet de modifier l'url dans la base de donnees
	 */
	function deplacerURL($newUrl){
		$query="UPDATE rportal_moteur_url SET url='".$newUrl."' WHERE id='".$this->my_url_id."'";
		@rportalrequete($query) or rportalerreur($query,"?op=");
		$this->my_url = $newUrl;
	}
	
	/**
	 * Permet de reinitialiser le moteur en modifiant l'url a indexer
	 */
	function initialiserURL($url){
		$this->my_url = $url;
		$this->_setUrlID();
	}
	
	/**
	 * Permet de dire si on va ecraser ou pas les mots deja indexes
	 * A faire avant chaque appel de indexer, sinon par defaut il ajoute les mots.
	 */
	function setInit(){
		$this->_init = 1;
	}
	
	/**
	 * Permet de mettre a jour le titre de l'url
	 */
	function setTitre($titre){
		$this->my_title = $titre;
		$query = "UPDATE rportal_moteur_url SET titre='$titre' WHERE id='".$this->my_url_id."'";
		@rportalrequete($query) or rportalerreur($query,"?op=");
	}
	
	/**
	 * Permet de mettre a jour la description de l'url
	 */
	function setDescription($description){
		$this->my_description = $description;
		$query = "UPDATE rportal_moteur_url SET description='$description' WHERE id='".$this->my_url_id."'";
		@rportalrequete($query) or rportalerreur($query,"?op=");
	}
	
	/**
	 * Permet de mettre a jour le type de document de l'url
	 */
	function setType($id){
		$this->my_type = $id;
		$query = "UPDATE rportal_moteur_url SET type='$id' WHERE id='".$this->my_url_id."'";
		@rportalrequete($query) or rportalerreur($query,"?op=");
	}
	
	/**
	 * Permet de mettre a jour l'ID du document de l'url
	 */
	function setHTMLID($id){
		$this->my_html_id = $id;
		$query = "UPDATE rportal_moteur_url SET id_html='$id' WHERE id='".$this->my_url_id."'";
		@rportalrequete($query) or rportalerreur($query,"?op=");
	}
	
	/**
	 * Permet de supprimer l'url du moteur de recherche
	 */ 
	function supprimer(){
		$query = "DELETE FROM rportal_moteur_url WHERE id='".$this->my_url_id."'";
		@rportalrequete($query) or rportalerreur($query,"?op=");
	}
		
	/*
	 * Prive
	 */
	function _setUrlID(){
		$this->my_texte = '';
		$query = "SELECT id,texte FROM rportal_moteur_url WHERE url='".$this->my_url."'";
		$result=rportalrequete($query) or rportalerreur($query,"?op=");
		if(rportalnbresult($result)==0){
			$query="INSERT INTO rportal_moteur_url (id,url) VALUES ('','".$this->my_url."')";
			$res=@rportalrequete($query) or rportalerreur($query,"?op=");
			$this->my_url_id = rportallastid($res);
		}else{
			$tmp=rportalligne($result);
			$this->my_url_id = $tmp['id'];
			$this->my_texte = $tmp['texte'];
		}	
	}
	
	
}
?>